/**
 * 给你一个链表，删除链表的倒数第 n 个结点，并且返回链表的头结点。
 * 输入：head = [1,2,3,4,5], n = 2 
 * 输出：[1,2,3,5]
 */
class ListNode {
  val;
  next = null;
  constructor(value) {
    this.val = value;
    this.next = null;
  }
}
var removeNthFromEnd = function (head, n) {
  let ret = new ListNode(0, head),
    slow = fast = ret;
  // while (n--) fast = fast.next;
  for (let i = 0; i < n; i++) { // fast首先走n + 1步 ，为什么是n+1呢，因为只有这样同时移动的时候slow才能指向删除节点的上一个节点（方便做删除操作）
    fast = fast.next;
  }
  while (fast.next !== null) {
    // fast和slow同时移动，直到fast指向末尾
    fast = fast.next;
    slow = slow.next
  };
  slow.next = slow.next.next;
  // 删除slow指向的下一个节点
  return ret.next;
};